{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import gym\n",
    "from itertools import count #一个高效的迭代器\n",
    "import numpy as np\n",
    "\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "import torch.optim as optim\n",
    "from torch.distributions import Categorical\n",
    "\n",
    "from IPython.display import clear_output\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<torch._C.Generator at 0x241ac3b54b0>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "env = gym.make('CartPole-v1')\n",
    "env.seed(42)\n",
    "gamma = 0.9\n",
    "torch.manual_seed(2) #为CPU设备设置种子用于生成随机数，让torch.rand(n)每次生成的随机数是确定的"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Policy 网络\n",
    "class Policy(nn.Module):\n",
    "    def __init__(self):\n",
    "        #引用nn.Module的__init__()，等价于nn.Module.__init(self)\n",
    "        super(Policy,self).__init__()\n",
    "        self.Line1 = nn.Linear(4,128)\n",
    "        self.dropout = nn.Dropout(p=0.5)\n",
    "        self.Line2 = nn.Linear(128,2)\n",
    "        \n",
    "        self.saved_log_probs = []\n",
    "        self.rewards = []\n",
    "    \n",
    "    def forward(self,x):\n",
    "        x = self.Line1(x)\n",
    "        x = self.dropout(x)\n",
    "        x = F.relu(x)\n",
    "        action_scores = self.Line2(x)\n",
    "        softmax_scores = F.softmax(action_scores,dim=1)\n",
    "        return softmax_scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "policy = Policy()\n",
    "optimizer = optim.Adam(policy.parameters(),lr=1e-2)\n",
    "eps = np.finfo(np.float32).eps.item()     #自然对数e"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def select_action(state):\n",
    "    state = torch.from_numpy(state).float().unsqueeze(0)\n",
    "    probs = policy(state)\n",
    "    m = Categorical(probs)                             #对probs求自然对数\n",
    "    action = m.sample()                                #对自然对数m进行sample，返回索引值\n",
    "    policy.saved_log_probs.append(m.log_prob(action))  #存储被sample到的action的对数值\n",
    "    return action.item()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "def finish_episode():\n",
    "    policy_loss = []\n",
    "    R = 0\n",
    "    returns = []\n",
    "    for r in policy.rewards[::-1]:\n",
    "        R = r + R*gamma\n",
    "        returns.insert(0,R)\n",
    "    returns = torch.tensor(returns)\n",
    "    returns = (returns -returns.mean())/(returns.std() + eps)# +eps??\n",
    "    for log_prob, R in zip(policy.saved_log_probs,returns):\n",
    "        policy_loss.append(-log_prob*R)\n",
    "    optimizer.zero_grad()\n",
    "    policy_loss = torch.cat(policy_loss).sum()\n",
    "    policy_loss.backward()\n",
    "    optimizer.step()\n",
    "    #清空数据\n",
    "    del policy.rewards[:]\n",
    "    del policy.saved_log_probs[:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_reward(frame_idx, rewards):\n",
    "    clear_output(True)\n",
    "    plt.figure(figsize=(20,5))\n",
    "    plt.title('frame %s. mean_reward: %s'%(frame_idx, np.mean(rewards[-10:])))\n",
    "    plt.plot(rewards)\n",
    "    plt.xlabel('epoch')\n",
    "    plt.ylabel('reward')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1440x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "running_reward = []\n",
    "for episode in range(200):\n",
    "    state, ep_reward = env.reset(), 0\n",
    "    for i in range(1,10000):\n",
    "        action = select_action(state)\n",
    "        state, reward, done, _ = env.step(action)\n",
    "        policy.rewards.append(reward)\n",
    "        ep_reward += reward\n",
    "        if done:\n",
    "            break\n",
    "    running_reward.append(ep_reward)\n",
    "    finish_episode()\n",
    "    plot_reward(episode,running_reward)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "CartPole-v1环境: action正确,reward=1;action错误,reward=0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1.Policy():定义神经网络结构\n",
    "\n",
    "2.select_action:定义选择动作函数(对每次进行sample的action概率取对数，并记录:$log(\\pi(s_i,a_i))$\n",
    "\n",
    "3.finish_episode:定义更新操作,计算出Baseline-R，将每次的-R*log_prob计算求和，计算loss.sum()进行反向传递更新\n",
    "\n",
    "4.训练: 先sample一个序列 P $<log\\pi(s_1,a_1)),R_1,\\dots,log(\\pi(s_n,a_n)),R_n>$，调用finish_episode()函数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "更新规则:\n",
    "$$\n",
    "\\theta_{t+1} = \\theta_t +\\alpha \\frac{\\hat{A}(s,a)\\nabla\\pi_{\\theta_t}(a|s)}{\\pi_\\theta(a|s)}\\\\\n",
    "\\theta_{t+1} = \\theta_t +\\alpha\\hat{A}(s,a)\\nabla_\\theta \\log\\pi_\\theta(s|a)\n",
    "$$\n",
    "Loss function:\n",
    "$$\n",
    "\\sum(-\\hat{A}(s,a)\\log\\pi(s|a))\n",
    "$$\n",
    "1.$\\hat{A}(s,a)$为advantage function,$\\pi_\\theta(s|a)$为在s采取动作a的可能性，可将其导数理解为在s采取动作a这个向量。\n",
    "\n",
    "2.除上$\\pi_\\theta(a|s)$是因为让小概率的动作获得较大的增长空间(增长可正可负)\n",
    "\n",
    "3.理解loss function:对loss求导才会有更新操作，所以Loss中没有求导"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcgAAAEaCAYAAACVV8fOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xd4VGX2wPHvSSAJLfReQkkA6SU0lQ6CIiAWigXcdXVtwCpi+VlQ1hVdV6woNsSGiAVsWJCOFAk9oSWEFnqHkJ6c3x8ziUkIJBmS3JTzeZ55MnPve997BiY58977FlFVjDHGGJORl9MBGGOMMYWRJUhjjDEmC5YgjTHGmCxYgjTGGGOyYAnSGGOMyYIlSGOMMSYLliCNKQRE5HkROS4ihwv4vNNF5OmCPKcxRYXYOEhjXERkD/APVf29gM9bH9gJBKjq0Xw8z5243t/V+XUOY4oTa0Ea47wA4ER+JkdjTO5ZgjQmB0TkbhGJEJGTIvK9iNRxbxcReVVEjorIGRHZLCKt3PuuE5GtInJORA6IyCNZ1NsPWADUEZFoEZkpIr1EJCpTuT3usojIsyIyR0Q+cdcdJiLB6crWF5FvReSYiJwQkbdE5ApgOtDNfZ7T7rIzReT57N6ne5+KyL0iEi4ip0RkmohIXv47G1OYWII0Jhsi0geYAgwHagN7gdnu3dcAPYCmQCVgBHDCve9D4J+qWgFoBSzKXLf7cu61wEFVLa+qd+YwrCHuGCoB3wNvuWP1Bn50x9gQqAvMVtVtwL3AKvd5KuXyfaa6HugEtHWXG5DDeI0pcixBGpO924AZqrpeVeOBJ3C1xBoCiUAFoDmue/rbVPWQ+7hEoIWI+KvqKVVdn4cxrVDV+aqaDHyKK2EBdAbqABNV9byqxqnqihzWean3mepFVT2tqvuAxUC7vHgzxhRGliCNyV4dXK0pAFQ1Glcrsa6qLsLVepsGHBGR90TE3130JuA6YK+ILBWRbnkYU/rerjGAn4iUAuoDe1U1yYM6L/o+L3He8h6cx5giwRKkMdk7iKsjDQAiUg6oChwAUNU3VLUj0BLXpdaJ7u1rVXUoUAOYB8zJ4fnOA2XTnc8bqJ7DY/cDDdzJMrPsuqxf8n0aU9JYgjQmo9Ii4pfuUQqYBfxNRNqJiC/wArBGVfeISCcR6SIipXEltjggWUR8ROQ2EamoqonAWSA5hzHsxNUiHOSu9ynAN4fH/gkcAl4UkXLu93CVe98RoJ6I+Fzk2Iu+zxye25hixRKkMRnNB2LTPZ5V1YXA08A3uJJPE2Cku7w/8D5wCtflyRPA/9z77gD2iMhZXB1kbs9JAKp6Brgf+ABX6+08EHXJg/46NhkYDAQC+9zHjXDvXgSEAYdF5HgWx17qfRpT4thEAcYYY0wWrAVpjDHGZMESpDHGGJMFxxOkiAwUkR3u2Tsez2L/w+7ZSDaLyEIRSd/Lbox7Vo9wERmTbntHEdnirvMNm+3DGGNMbjl6D9LdfX0n0B9XZ4K1wChV3ZquTG9cPeliROQ+oJeqjhCRKkAIEIyr+/o6oKOqnhKRP4HxwGpcnS7eUNWfC/K9GWOMKdqyGitVkDoDEaoaCSAis4GhQFqCVNXF6cqv5q+egAOABap60n3sAmCgiCwB/FV1lXv7J8ANwCUTZLVq1bRhw4Z58JaMMabkWLdu3XFVzek43SLF6QRZF9fA5lRRQJdLlL+LvxJdVsfWdT+isth+ARG5B7gHoEGDBoSEhOQmdmOMKfFEZG/2pYomp+9BZnVvMMtrviJyO67LqS9nc2yO61TV91Q1WFWDq1cvll+AjDHGeMjpBBmFa+7IVPVwTXeVgXuZnyeBIe5JlC91bJT7+SXrNMYYYy7F6QS5FggSkUbu6a9G4lq6J42ItAfexZUc0y8o+ytwjYhUFpHKuJYd+tW9ksI5Eenq7r06GviuIN6MMcaY4sPRe5CqmiQiD+JKdt64ltoJE5HJQIiqfo/rkmp54Cv3aI19qjpEVU+KyL9xJVmAyakddoD7gJlAGVz3LK0HqzHGmFyxqebcgoOD1TrpGGNM7ojIOlUNdjqO/OD0JVZjjDGmULIEaYwxxmTBEuRl2hJ1hjcXhnP0bJzToRhjTK4lJKWQlJzidBiFkiXIy/THruO8smAn3V5cxD8/DWHpzmOkpNh9XWNM4XbkbBxTF+zkyhcX8WvYEafDKZScnkmnyLu3ZxMGtKzF7LX7+Dokil/DjlCvchlGdwtgVOcGVPAr7XSIxhgDgKoSsvcUH6/cwy+hh0lWpVfT6tSq6Od0aIWS9WJ1y4terPFJyfwWdoTP1+xldeRJKviVYnS3AO68shHVK/jmUaTGGJM7qsrv247y5qJwNkedwd+vFMOD63N71wAaVit3WXUX516sliDd8nqYx+ao00xfuoufQw9T2tuL4cH1eKB3ILUrlsmzcxhjzKWkpCi/hh3mjUURbDt0lgZVyvLPno0Z1r4uZX3y5gKiJcgSIL/GQUYei+b95ZF8vS4KLxH+dlUj7uvVhIpl7NKrMSZ/qCqLth/lpV+2s/NINI2qlePB3oEMbVeHUt552/XEEmQJkN8TBew/GcPUBTuZt/EA/n6lebB3IHd0C8CvtHe+ndMYU/JsP3yW53/cxoqI4zSuVo7x/YK4vk0dvL3yZ914S5AlQEHNpBN28Az//WUHS3ceo17lMvx7aCt6N6+R7+c1xhRvx87FM3XBTr5cu48KfqX5V78gbu8aQOk8bjFmZgmyBCjoqeb+iDjOM9+FsuvYea5rXYtnrm9pPcmMMbmmqswJ2c/zP20jNiGZ0d0aMq5vIJXK+hTI+S1BlgBOzMWakJTCe8t28eaiCEp7ezHhmqaM7tYw3y6FGGOKl70nzvPEt1tYuesEXRpV4YUbW9OkevkCjcESZAng5GTle0+c5+nvwli28xgdAyozdXhbAqpeXtdrY0zxlZyizFixm1cW7KCUlxdPXNecUZ0a4OXAl2tLkCWA06t5qCrzNh7gme/CSE5RnhrUglGd6+Ne4ssYYwCIOhXDQ19uZO2eU/RtXoPnh7VydPhYcU6QNpNOISEiDGtfjy6NqjLx603839wtLN5xlP/d3JaKZW1IiDEGftp8iMe/3UxKivLKLW25sUNd+xKdj2wu1kKmTqUyfPr3Ljw16AoWbz/KoDeXs3H/aafDMsY4KD4pmSfnbuGBWetpXL0888d356aO9Sw55jNLkIWQl5fwj+6NmXNvN1Thlukr+XTVHuxyuDElz8HTsQx/dzWfr9nHP3s05ut7u1kfhQLieIIUkYEiskNEIkTk8Sz29xCR9SKSJCI3p9veW0Q2pnvEicgN7n0zRWR3un3tCvI95ZUODSrz07iruTqwGk9/F8b/zd1CQpItS2NMSbFq1wkGv7mCXUejeee2Djxx3RX5Pq7R/MXRe5Ai4g1MA/oDUcBaEfleVbemK7YPuBN4JP2xqroYaOeupwoQAfyWrshEVf06/6IvGJXK+vDBmE688tsO3l6yi/Aj0bxze0eb/NyYYu7Ltft4cm4oAVXL8u4dwQTWKNjhG8b5FmRnIEJVI1U1AZgNDE1fQFX3qOpm4FJNp5uBn1U1Jv9CdY63l/DowOa8Oao9oQfPcOM7f7DrWLTTYRlj8kFKijJl/jYe+2YL3ZpUZe4DV1lydIjTCbIusD/d6yj3ttwaCXyRadt/RGSziLwqIlk2t0TkHhEJEZGQY8eOeXDagjW4bR2+vKcbMfHJ3PTOSkL2nHQ6JGNMHopPSubBL9bz7rJIbu/agI/u7IS/rSnrGKcTZFZdsHLVE0VEagOtgV/TbX4CaA50AqoAj2V1rKq+p6rBqhpcvXr13JzWMW3rV+Lb+6+kclkfbv1gDb+EHnI6JGNMHjgXl8jfPlrL/C2HeWrQFfx7aKs8X3nD5I7T//pRQP10r+sBB3NZx3Bgrqompm5Q1UPqEg98hOtSbrERULUc39x3JS3r+HP/5+v5Zl2U0yEZYy7D8eh4Rr2/mj93n+TVEW35R/fGNoSjEHA6Qa4FgkSkkYj44LpU+n0u6xhFpsur7lYl4vqE3QCE5kGshUqVcj58dlcXujWpyoSvNvHpqj1Oh2SM8cDRs3GMeHcVEUejeX90MMPa13M6JOPmaIJU1STgQVyXR7cBc1Q1TEQmi8gQABHpJCJRwC3AuyISlnq8iDTE1QJdmqnqz0VkC7AFqAY8n9/vxQnlfEvx4ZhO9LuiBk9/F8Z7y3Y5HZIxJhcOn4lj5HurOXwmjk/+3sWWvitkbC5WN6fnYr0cickp/OvLjfy0+RBPDbqCf3Rv7HRIxphsHDwdy6j3V3MiOoGP/96JjgFVnA7JIzYXqynUSnt78fqIdqgqz/+0jdLeXoy5sqHTYRljLuLo2ThufX81J6MT+PSuzrRvUNnpkEwWLEEWE6W8vXh9ZHuSktcz6fswSnkLt3UJcDosY0wmp84ncPuHazh6Lp7P/tHFkmMh5nQnHZOHSnt78datHejTvAZPzQvlx8257RBsjMlP5+ISGfPRn+w5EcMHY4LpYMmxULMEWcz4lPLi7ds6EBxQmYe+3MiK8ONOh2SMwTUJwD8+DmHrwbNMv70DVzap5nRIJhuWIIshv9LefDCmE02ql+eeT0PYZMtlGeOolBRl4lebWbP7JK8Mb0uf5jWdDsnkgCXIYqpimdJ88vfOVCnnw99nrmX/yWI5Ta0xRcIrC3bw/aaDPDqwGUPbeTKbpnGCJchirIa/Hx//vTNJKcrfZq7lTGxi9gcZY/LUF3/uY9riXYzq3ID7ejZxOhyTC5Ygi7km1csz/faO7D1xnvs/X0disq0naUxBWbLjKE/NC6VXs+r8e2hLmz6uiLEEWQJ0a1KVKTe24Y+IEzw9LxSbHMKY/Lft0Fke+Hw9zWtV4K1bO9jE40WQjYMsIW7uWI89x8/z1uIIWtatyB1dbYykMfnldEwC93waQnm/Usy4sxPlfe1PbVFkX2lKkIf7N6V3s+pM/iHM1pI0Jp8kpyjjZm/kyJl4pt/ekZr+fk6HZDxkCbIE8fISXhvRnjqVynDf5+s5cjbO6ZCMKXZe+W0Hy3Ye47mhLW2WnCLOEmQJU7Fsad67I5jz8Unc//l6EpKs044xeeWX0EO8vWQXozrXZ1TnBk6HYy6TJcgSqFmtCvz35jas23uKyT+GZX+AMSZb4UfOMWHOJtrVr8SzQ1o6HY7JA5YgS6jr29Thnz0a89nqfXyzLsrpcIwp0s7HJ/HPz9ZRxsebd27vgG8pb6dDMnnAEmQJNnFAM7o2rsLT34USeSza6XCMKbKe+S6MPcfP8+aoDtSuWMbpcEwesQRZgpXy9uK1Ee3xKeXF2C82EJ+U7HRIxhQ58zYc4Jv1UTzYJ4huTao6HY7JQ44nSBEZKCI7RCRCRB7PYn8PEVkvIkkicnOmfckistH9+D7d9kYiskZEwkXkSxHxKYj3UhTVqujHyze3JezgWf77yw6nwzGmSNl74jxPzQslOKAy4/oEOh2OyWOOJkgR8QamAdcCLYBRItIiU7F9wJ3ArCyqiFXVdu7HkHTbXwJeVdUg4BRwV54HX4z0b1GTMd0C+HDFbhZvP+p0OMYUCQlJKYz7YgNeAq+NbGcz5RRDTv+PdgYiVDVSVROA2cDQ9AVUdY+qbgZyNB5BXJMd9gG+dm/6GLgh70Iunp647gqa16rAhK82cdTGRxqTrVcW7GBT1BleuqkN9SqXdTockw+cTpB1gf3pXke5t+WUn4iEiMhqEUlNglWB06qalF2dInKP+/iQY8eO5Tb2YsWvtDdv3dqe2IRkHpqzkZQUm6/VmItZHn6Md5dGcmuXBlzburbT4Zh84nSCzGpq+9z8ZW6gqsHArcBrItIkN3Wq6nuqGqyqwdWrV8/FaYunwBoVeGZwC/6IOMEnq/Y4HY4xhdKZ2EQmfrWZwBrleXpQ5jtCpjhxOkFGAfXTva4HHMzpwap60P0zElgCtAeOA5VEJHV24FzVWdKN7FSf3s2q8+Iv29l9/LzT4RhT6Ez+YSvHouOZOrwtZXxsvGNx5nSCXAsEuXud+gAjge+zOQYAEaksIr7u59WAq4Ct6lrLaTGQ2uN1DPBdnkdeTIkIU25sg4+3FxO/2kSyXWo1Js3vW4/wzfoo7u/VhDb1KjkdjslnjiZI933CB4FfgW3AHFUNE5HJIjIEQEQ6iUgUcAvwroikzo12BRAiIptwJcQXVXWre99jwMMiEoHrnuSHBfeuir5aFf14dkhLQvaeYsaK3U6HY0yhcOp8Ak/M3ULzWhUY2yfI6XBMAXB8kTJVnQ/Mz7TtmXTP1+K6TJr5uJVA64vUGYmrh6zx0LD2dZm/5TAv/7aD3s1rEFijvNMhGeOoZ38I49T5BGb+rRM+pZy++GYKgv0vmyyJCC/c2IqyPt5M+GoTScm26ocpuX4JPcR3Gw8ytk8QLetUdDocU0AsQZqLqlHBj8lDW7Fp/2neWx7pdDjGOOLk+QSenBtKq7r+3N+7idPhmAJ0WQlSRMq5Z8MxxdTgNrUZ0LImr/8ezt4T1qvVlDwvzN/GmdhE/ndLW0rbbDklSq7+t0XES0RuFZGfROQosB04JCJhIvKyiNid62JGRHhuSCtKe3vx1LxQXJ2EjSkZVu46ztfrorinR2Oa1/J3OhxTwHL7dWgx0AR4AqilqvVVtQbQHVgNvCgit+dxjMZhtSr68ejAZiwPP853G21IqSkZ4hKTeXJuKA2qlGVcX/vuXxLlNkH2U9V/q+pmVU3rtaGqJ1X1G1W9Cfgyb0M0hcFtXQJoV78S//5xK6djErItHxUVxdixY9m4cWMBRGdM3nt7yS52Hz/Pf4a1wq/0X3eSUlJS+OKLL3jooYccjM4UhFwlSFVNTP86q3uQmcuY4sHbS5hyY2tOxyYyZf72i5Y7ffo0TzzxBG3btqVcuXI0bdq0AKM0Jm9EHD3HO0siuKFdHboH/TUN5aJFi+jcuTNTp07lpptucjBCUxDsHqTJsStq+/OP7o34MmQ/ayJPZNgXHx/Pq6++SrNmzTh69CibNm3ixRdfpGxZW+XAFC0pKcr/fRtKOd9SPHW9a67VLVu2cN1113H33XczceJE1qxZw9VXX+1wpCa/SW46XYjIUuB3XFO3haZeZhWRKkBvXJOGz1XVz/Ih1nwVHBysISEhTodR6MUmJNP/1aX4lPLi5/Hd8S3lzQsvvMBrr71G3bp1GTZsGLVr18bPz48yZcpQtmxZypQpk+F55cqVqVq1Kq6VyYwpXL5cu4/HvtnCf29qQ5caKYwePZqNGzdy3XXXcdVVV1G6dOm0z3Tq5zz98xo1apSoz7eIrHMvGlHs5HYmnX5ZXUJV1ZPAN8A3IlI6TyIzhVIZH2+ev6EVd360lg9X7Ob+XoHMnTuXU6dOUatWLbZt28a+ffuIi4sjNjaW2NhYYmJiMjw/deoU58+fp27dutSrV4969eqlPa9fvz4tWrQgMDAQb28bQWQK1umYBF78eTudG1XhluB6zJ8/n3Xr1uHn58exY8fYsmULqkpsbGyGz3jq65iYGI4cOUJsbCx169bN8KhXrx4BAQG0bt2axo0b4+VlQ0YKu1y1INMOEqkKDAfigDBgi6rG5nFsBcpakLlzzychrIg4zqIJvahV0Y/w8HCmTp3K7NmzGTFiBBMmTCAo6OJX3GNiYjh48CBRUVFpjwMHDrB3715CQ0M5evQoLVu2pG3btmmPNm3a4O9vXe1N/nl6Xiiz/tzHT+OuThvWkZSUxLfffsvLL7/M2bNnmTBhAqNHj8bPz++i9cTExHDgwIELHpGRkWzZsoUTJ07QqlUr2rRpk/bZbt26NRUrFr1ZeopzC9LTBLkM16XW+4CdQDcgUlWb5214BccSZO7sPxlDv6lLGdCyFm+Map+2/ciRI7z11ltMnz6dHj16MGXKFI866pw5c4YtW7awadOmtEdoaCgNGzakb9++9O3bl169ehXJPyimcNp68CzXv7mc0d0a8uyQlhfsV1WWLVvGyy+/TEhICOPGjePxxx/3qCV4+vRpNm/ezObNm9m0aRObN28mLCyMJk2a0KdPH/r27UuPHj2KxBdCS5CZDxLZoKrtRWSjqrYTkZuAQFV9Ke9DLBiWIHNv6oKdvLEwnC/v6UqXxlUz7IuOjuajjz4iMDCQa6+9Nk/Ol5yczPr161m4cCELFy5k9erVtGzZMi1hXnnllZf8Vm/MxagqI95dTcSxaBZP6EXFspe+UxQWFsasWbN4+umn8+wzl5iYSEhICIsWLWLhwoX8+eeftG7dOi1hXnXVVfj6+ubJufKSJcjMB4msUtVuIrIG6KWqsSKyVFV75n2IBcMSZO7FJiTTb+pSKviV4sexV1OqgKfhiouLY9WqVWkJc/v27QwePJiRI0fSr18/fHx8CjQeU3R9t/EA42dv5MUbWzOycwOnwwEgNjaWlStXsmjRIn7//XfCw8MZMmQII0eOpG/fvpQuXTi6e1iCzHyQq8W4GLgT6ASsBMaramCeRleALEF65ucth7jv8/VMHtqS0d0aOhrLoUOH+Prrr5k9ezY7duzgxhtvZOTIkfTs2dM6/JiLOh+fRJ9XllDT349591+Fl1fh7H164MABvvrqK2bPns2uXbu48cYbGTFihOOfb0uQl6pA5A5c6zJ+rKph2ZUvrCxBekZVuf3DNYQeOMviR3pRpVzhaLXt3buXOXPm8OWXX3LgwAFGjRrF/fffT2Bgkf0OZ/LJiz9vZ/rSXcy9/0raN6jsdDg5smfPngyf79tuu40HHniAxo0bF3gsxTlB5naigAaZH8BS4C3gXLrthf/OsskTIsKzg1sSHZ/Ey7/ucDqcNAEBAUycOJGQkBCWLl2Kj48P3bp14/rrr+e3336zSdcNALuPn+fDFZHc3LFekUmOAA0bNuTRRx9l3bp1LFu2DG9vb7p06cLgwYPt852HcjtRwGJAgUtdg1Bgpqp+ksM6BwKvA97AB6r6Yqb9PYDXgDbASFX92r29HfAO4A8kA/9R1S/d+2YCPYEz7mruVNVLTgpqLcjL89wPYXy8cg/zx3cvtKsexMbGMmvWLN544w0SEhJ48MEHGT16NBUqVHA6NOOQuz8JYWXEcRZP7EWNCkW7g1dMTEza5zsxMbHAPt/FuQWJqjr2wJUUdwGNAR9gE9AiU5mGuJLjJ8DN6bY3BYLcz+sAh4BK7tcz05fNyaNjx45qPHfqfLy2efZXvf2D1U6Hkq2UlBRdsmSJ3nTTTVqlShWdOHGiHjt2zOmwTAFbteu4Bjz2o761KNzpUPJUQX++gRB1MI/k58OjbocisjT1MqqI3Csi/xIRT24+dQYiVDVSVROA2cDQ9AVUdY+qbgZSMm3fqarh7ucHgaNAdYwjKpX1YWyfQJaHH2fJjqNOh3NJIkLPnj35+uuvWb9+PefOnaNZs2ZMmjSJM2fOZF+BKfJSUpTnf9pKnYp+3HV1I6fDyVPpP98bNmwgOjqaZs2a8cwzz3D69GmnwytSPO2XX0lVz4pIR+BuoDLwvgf11AX2p3sd5d6WKyLSGVcLdFe6zf8Rkc0i8qqIZDl4SETuEZEQEQk5duxYbk9rMhndrSEBVcvywvxtJCWnZH9AIRAQEMA777xDSEgIe/fuJTAwkClTpnD+/HmnQzP5aN7GA4QeOMvEgc0yLGVV3DRo0IC3336bkJAQoqKiCAoK4oUXXiA6Otrp0IoETxNkooiUAkYDL6nqJODCqSeyl9W9zFzdXRaR2sCnwN/0rzUqnwCa4xqCUgV4LKtjVfU9VQ1W1eDq1a3xebl8Snnx+MDm7DwSzZyQKKfDyZVGjRoxc+ZMli9fzqZNmwgMDOT1118nPj7e6dBMHotNSOblX3fQpl5FhrbN9ffxIqlRo0bMmDGDFStWEBoaSmBgIK+88gpxcXFOh1aoeZog38B1v/B64Af3tvIe1BMF1E/3uh6Q4yXr3Zd5fwKeUtXVqdtV9ZD78ng88BGuS7mmAAxsVYtODSszdcEOouOTnA4n15o3b87s2bP55Zdf+P3332nZsiU//vij02GZPPThikgOnYnjyeuuKLRjHvNLs2bNmDVrFgsWLGD58uW0aNGCefPmWa/Xi/AoQaqrh2oXoJW6ZtEJBFZ5UNVaIEhEGrnvYY4Evs/Jge7yc4FPVPWrTPtqu38KcAMQ6kFsxgMiwpODWnA8OoHpS3Zlf0Ah1bZtW3744QemTZvGI488wqBBg9izZ4/TYZnLdPRcHO8s2cU1LWpeMD1iSdK6dWvmzZvHe++9x5NPPsk111xDRESE02EVOrkdB5n2dUtVo9W9goeqRqjq3zKXyY6qJgEPAr8C24A5qhomIpNFZIi7vk4iEgXcArwrIqmTEQwHegB3ishG96Ode9/nIrIF2AJUA57Pzfs0l6dd/UoMaVuH95dHcvB0kV7khQEDBrB582b69evH2rVrnQ7HXKZXF4QTn5TC49cW2XUV8lS/fv3YuHEjgwcPZtUqT9o4xVtux0EuwbXu43equi/ddh/gamAMsFhVZ+ZtmPnPxkHmrahTMfR5ZSlD29bh5VvaOh2OMUQcjeaaV5dedLUO45niPA4yt5dYB+IalP+FiBwUka0iEgmEA6OAV4ticjR5r17lsozuGsA366MIP3LO6XCM4ZXfdlCmtDdj+9h0gyZncpUgVTVOVd/GlSgDgL5AB1UNUNW7NZvZakzJcn/vQMr5lCpUU9CZkmnj/tP8HHqYu3s0pmr5wrdklCmcPO3Fuh4IAo6p6mkAEcn9qrimWKtSzod7ejTmt61HWLf3VIGcs1evXvTq1atAzlUYzJw5ExGxDkSXoKq89PN2qpbz4R/dC34y77zkyedbRHj22WfzJZ6CICK9RERFpFdBn7uUh8dVAaYBzUXkOK4ONh0Au3ZhMvj71Y34eNVeXvplO1/e05Vc9OEyJk8sDz/OqsgTTBrcgvK+nv7JKxzefvvtXB+zatUq6tWrlw/RFH+eflr2qWpvABGpB1wBFO3uiiZflPMtxbi+gTzzXRhLdh6jd7MaTodkSpCUFOWlX7ZTr3IZbu1SOBZC9lR8fDwtWrTI9XFdu3bNh2hKBk8vsVYUkStFpKKqRqnqAlVdkaeRmWIcb2+1AAAgAElEQVRjZKcGNKhSlv/+soOUlLwbkDx79myaN2+Or68vLVu2ZO7cuReU2bFjB8OGDaNSpUqUKVOGrl278ssvv6TtDwkJQURYseKvj++bb76JiPDUU0+lbQsPD0dEmD9/PvDXpc3Vq1dz22234e/vT506dRg3blyuZydJSkpiypQpae+lTp06TJgw4YJ6IiMjGTRoEGXLlqV69eqMHz8+y5l+YmJiuO+++6hatSoVKlRg2LBhrFy5EhFh5syZGcouXbqUvn37UqFCBcqVK8eAAQMIDS0+w4Z/2nKIsINnmXBNU3xLFZ0p5Z599llEhNDQUAYMGED58uUZPnz4BZdYo6OjGTt2LA0aNMDX15eaNWvSr18/tm/fnlYm8yXW1LrDw8MZNGgQ5cuXJyAggMmTJ5OSknGKyPXr19O9e3f8/PyoX78+L7zwApMmTfLoSpCI3C0im0QkTkSOi8iHIlIlU5nqIjJLRM6KyGkR+QSolEVd3iLyvIgcEpEYEVkkIs3dl2KfzVS2rYh8LyKnRCRWRP4Qke45idnTBFkeeAT4U0T2iMjPIvKyh3WZYs6nlBcTrmnKtkNn+WFzjidKuqTff/+dW2+9laCgIL799lsmTpzI+PHj2bHjrw5BBw8e5Oqrr2bTpk289dZbzJkzh0qVKjFo0CB+/vlnADp06EClSpVYtGhR2nGLFi2iTJkyF2zz9vame/eMv1d33HEHTZo04dtvv+W+++5j2rRpTJkyJVfv5fbbb+f555/n1ltv5aeffuKJJ57gww8/5Lbbbksrk5CQQP/+/dmwYQPTpk1j5syZ7N69m+efv3CI7z333MOMGTN45JFH+Pbbb2nWrFmGulL99NNP9O3bl/Lly/PZZ58xa9Yszp07R/fu3dm/f/8F5YuaxOQUXvltB81rVWBIEZ1SbujQofTs2ZPvv/+ehx566IL9Dz30EHPmzGHSpEksWLCA6dOn065duxxNSj5s2DD69OnDvHnzuOGGG5g0aRIff/xx2v7jx4/Tt29fTp48ySeffMKbb77Jr7/+esGXrJwQkReBt4HfgSHARFydPX8WkfTfXL7FNUPb/wEjgCTgzSyqfM5d5hNcC1z8ShaTzIhIB2AlrtuCdwM3ASeA391ziV+aJ0uAAE3SPffDdf/xDqeXJrmchy13lb+Sk1P02teWafeXFmlCUvJl13fllVfqFVdcocnJf9W1evVqBbRnz56qqjphwgT19vbW8PC/ljNKSkrSpk2bavv27dO2DRkyRHv16uWOM1krV66sDz/8sJYqVUrPnTunqqojRozQLl26pB3z0UcfKaDPPPNMhrgGDRqkQUFBOX4fy5YtU0A//vjjDNs/++wzBXTDhg2qqvree+8poKtWrUork5ycrC1atFBAd+/eraqq27dvVxHRl156KUN9Y8eOVUA/+uijtG1NmjTRPn36ZCh35swZrVq1qo4fPz7H76Gw+nTVHg147EdduO2w06Hk2qRJkxTQ1157LcP2nj17pn2+VVVbtmypDz300CXrAnTSpEkX1D1jxowM5Vq1aqX9+/dPe/3EE09o6dKldf/+/WnbYmJitEaNGupKHWn1X3K5K1xLFiYDz2TafhWuubdvcL/u7349MlO5n93be7lfVwaigbczlXvYXe7ZdNsW4uoj45Num7d727xLxa2eLnelqrvSPY9T1fWq+qkndZmSwctLmDigGftOxvDVZU5knpyczNq1a7n55pvx8vrrI9ylSxcaNmyY9nrZsmV07dqVwMC/+o55e3szatQoNm7cyNmzZwHo3bs3q1atIi4ujo0bN3L69GkeffRRfH19Wb58OQBLliyhT58+F8QyaNCgDK9bt27Nvn37Lih3Mb/88gs+Pj7cdNNNJCUlpT2uueaatPcAro4W9evXz3A/ycvLi+HDh2eob82aNagqt9xyS4btN998c4bX4eHh7Nq1i9tuuy3DecuWLUu3bt3SzltUxSUm89aiCIIDKhfp+97Dhg275P5OnToxc+ZMXnjhBUJCQkhOTs5x3Zk/u61atcrw2V29ejXdunXL0MGnTJkyFxyXA/1xXa38XERKpT6ANcBZXDOiAXTDlUi/yXT87EyvWwPlgK8ybf86/QsRKQP0dJdLSXdewdWS7UE2POqkIyIPZ7H5DLBObSykuYhezarTvkEl3loUzk0d63p8T+j48eMkJiZSs2bNC/al33by5Enat29/QZlatWqhqpw6dQp/f3/69OlDfHw8K1euZMOGDbRt25aaNWty9dVXs3jxYho0aMCRI0fo3bv3BXVVqZLhFgq+vr65WgHk6NGjJCQkUL581nP9nzhxAoBDhw5l+35TywHUqFHjkuWOHnWt2XnXXXdx1113XVBvgwZFu0PLrDX7OHw2jqkj2hbpntO1a9e+5P4333yTWrVqMWPGDJ588kmqVKnC6NGj+c9//kPZsmUveWxWn930970PHTpEq1atLjguq89hNlI/jBeb7DV1UtzawClVTcy0/0im16n/KJkXns1crgqu1uLT7scFRMRL/1oF6gKe9mINdj9SV/IYhGvi8XtF5CtV/a+H9ZpiTESY0L8Zt3+4htl/7mfMlQ09qqdatWqULl2aI0cy/z7AkSNHCAgIAFx/AA4fPnxBmcOHDyMiaX8gWrduTbVq1Vi0aBEbNmxIayn26dOHOXPmUL9+fXx8fLjqqqs8ivdSqlatip+fX1pLNbM6deoArj+UYWFhF+zP/G+Q+gf16NGjNGrU6KLlqlZ1/U2aMmUK/fr1u6BeHx9P1j8vHGITknl7yS66Na7KlU2qOR3OZckuuZcvX54pU6YwZcoU9u7dy9dff83jjz+Oj48PL7300mWdu3bt2mlfpNLL6vcuGyfcP68BshoQnbr/EFBZREpnSpKZM/Ih988aQNglyp0GUnANSfwkq8AulRzB8046VXHNoDNBVSfgSpbVcU8e7mGdpgS4KrAqnRtVYdriCOISc345KD1vb286derE119/naHX3Zo1azIMmO/ZsyerV6/OsC05OZkvv/yS9u3bU6FCBeCvFdhTlwBKnyA3bNjA3Llz6dKlS7bfyD0xcOBA4uLiOHPmDMHBwRc8UhNkt27d2L9/P6tXp63qRkpKCnPmzMlQX5cuXRARvvoq49WnzK+bNWtGw4YNCQsLy/K8bdq0yfP3WlA+WbWH49HxTLimZM1dEhAQwIQJE2jdunWe9ETu2rUrq1atIirqr1sisbGx/PTTT7mtagGuRNVAVUOyeOx2l1uFq8V3U6bjR2Z6vQU4j2sBi/QyvFbV88ByoC2wPqtzZxe4py3IBkBCuteJQIC6lr6yFWbNRblakU0Z8d5qPlu91+OZTZ577jmuueYabrjhBv75z39y7NgxJk2aRK1atdLKPPTQQ8ycOZP+/fvz3HPP4e/vz9tvv83OnTsv+CXv06cPDzzwQIaeqh06dMDf35/FixfzzDPPeP6mL6FXr16MGjWKm2++mYcffpjOnTvj5eXFnj17mD9/Pi+99BJNmzZlzJgxvPjii9x444288MIL1KhRg+nTp6fdR03VrFkzbr31Vp5++mlSUlLo2LEjixYt4ocfXBd7Uu/ZigjTpk1j6NChJCQkMHz4cKpVq8aRI0dYuXIlDRo04OGHs7qTUrhFxycxfekuejStTnDDKtkfUMR169aNIUOG0Lp1a8qXL8/SpUvZtGkTY8aMuey6H374Yd555x0GDBjApEmT8PX1ZerUqfj6+ubqsrWq7hKRl4C3RKQZsBSIw7UWcH/gA1VdrKoLRGQFrlWbquGa43sE0CpTfadE5DXg/0TkHK77iR2A1HsF6VuFDwPLgF9F5ENcrc9q7vLeqvp4dsF70ov1aVzTzU0CngVCgGdw3Tj93JM6nX5YL9aCddv7q7XD5N80Oi7R4zpmzZqlTZs2VR8fH23RooV+++23F/Ty2759uw4dOlT9/f3V19dXu3Tpoj///PMFdW3dulWBDD1VVV09XAFdvHhxhu2pvVjT95BV/auHYG4kJyfra6+9pm3atFFfX1/19/fXNm3a6MSJE/X06dNp5Xbt2qXXXnutlilTRqtVq6bjxo3T6dOnZ+jFqqp6/vx5vffee7Vy5cparlw5HTx4sP74448K6Lx58zKce+XKlTpo0CCtVKmS+vr6akBAgI4YMUJXrlyZq/dQWLy5cKcGPPajbth3yulQLkvq5ygxMePvR+bP96OPPqrt2rVTf39/LVu2rLZq1Upff/31DMdwkV6smeseM2aMBgQEZNi2bt06veqqq9TX11fr1KmjkydP1nHjxmmlSpXS13/JXqypD+AOYDWu1l80rp6kbwH10pWpDnwBnMN1iTR1GEdaL1b9qyfqf4DDuCapWQJc6S43PtN5r8DV0ecoEA9E4RoScl12Medquav03GNIrsbVI2iF5qC5WpjZclcFa/2+U9z49koeHdiM+3vZDIX57eWXX+axxx5jz549Rb4DzsWciU2k+0uL6NyoCh+M6eR0OMVScnIyHTp0oFq1aixcuBAoPMtdicgtwBygh6pmfVM/ly5nYsIkXE1ZxXWJ1Zgc69CgMr2bVee9ZZHc0TWACn6lnQ6p2Pjxxx8JDQ2lXbt2eHl5sXz5cv73v/8xfPjwYpscAT5csZuzcUk81L9k3XvMT08//TSBgYEEBARw4sQJPvjgAzZv3pw2o5RTRKQLrs6ha3Bdru0IPI6rhZpns7p5OsxjPK5ZCb7B1YL8TETeU9WsZjwwJksP92/G4LdWMGPFHsb3C3I6nDyXnJzMpa7QeHl5ZRjHmVcqVKjAvHnzePHFFzl//jx169Zl3LhxPPfcc3l+rsLi1PkEZqzYzbWtatGyTkWnwyk2RITJkydz8OBBRIQ2bdowb948rr32WoC0TnLu8YVZUVX1rDfepUXj6hT6AOCP6/LpHOAJ9fSyaFZycu04i2vJm4Fy6V6XAzZ7WNdAYAeuMTKPZ7G/B677nUnAzZn2jcF1IzccGJNue0dcPZ0igDfAdSn5Ug+7B+mMuz9eq60m/aKnzyc4HUqe69mzp+K6wpLlY8yYMU6HWGy8+PM2bfj4j7rj8FmnQylRxowZc8nPOLBEC0EfE08fnl5iFVwzHqRKdm/LXSWuOfim4erJFAWsFZHvVXVrumL7cA0deSTTsVVwdRIKxvUfsc597CngHeAeXM3t+bjn/MttfCb/PdS/Kb+9vpz3l0fyyIBmToeTp959913OnTt30f3VqhXtMXqFxfHoeGb+sYfBberQtGYFp8MpUZ599lk+/vjjbcDoixS5+C9AEeBpgvwIWCMiqcsn3AB86EE9nYEIVY0EEJHZuHospSVIVd3j3pd5QOcAYIGqnnTvXwAMFJElgL+qrnJv/8QdnyXIQuiK2v4MalObj/7Yzd+vbkSVckV3gHpmzZoVr4RfWE1fsov4pORieZm+sHNP7RijRbyT5sV4OhfrVODvwElcMyP8TVVf86CqukD6ZQOi3Nsu59i67ufZ1iki94hIiIiEHDt2LMdBm7z1r75BxCQm8+GKSKdDMUXM8eh4Pluzlxva1aVJ9ayn6zPGUx73EFDVdar6hqq+rqobPKwmq8uyOb3BerFjc1ynqr6nqsGqGly9evUcntbktaCaFbiudW0+XrmX0zEJ2R9gjNv7yyNJSErhwT42VMjkvVwlSBE5517I8ly656mvz2ZfwwWicM2mkKoekNMFAy92bJT7uSd1GoeM7RNIdHwSM1bszr6wMcDJ8wl8umovQ9rWobG1Hk0+yFWCVNUKqurv/lkBqANUSd3uwfnXAkEi0khEfHDNuXfBopcX8StwjYhUFpHKuCbC/VVVDwHnRKSruOZDGg1850FspgA1r+XPta1q8dEfezgTY8NqTfY+XBFJbGKytR5NvsltC9JLREaJyI8icgTXVEEHRSRMRF4WkVzdJVfVJOBBXMluGzBHVcNEZLKIDHGfs5OIROGaiPZdEQlzH3sS+DeuJLsWmJzaYQe4D/gA1zCPXVgHnSJhbJ8gzsUn8dFKa0WaSzsdk8DHK/cyqHVtAmtYz1WTP3Lbi3Uxrolh/w8IVfdSIe4hF72BF0Vkrqp+ltMKVXU+rqEY6bc9k+75WjJeMk1fbgYwI4vtIWSa4NYUfi3q+HNNi5rMWOHq0epvs+uYi5ixYjfR8UmM7WM9V03+yW0nnX6q+m9V3azp1tFS1ZOq+o2q3gR8mbchmpJkXN8gzsYlMfOPPU6HYgqpM7GJfPTHHq5tVYtmtaz1aPJPbu9BZntzKCdljLmYVnUr0u+KGny4Yjfn4uyjZC408489nItPsnuPJt95NMxDRKqKyH0i8jcR6SwiZfI6MFNyjesbxJnYRD5ZtdfpUEwhcy4ukQ9XRNK/RU2bc9XkO0/HQc7FtW7XC8DLwBkR2Z5nUZkSrU29SvRuVp33l0cSHZ/kdDimEPlk1V7OxiUxzu49mgLgaYKsoKqTgSOq2hMYhWv6OWPyxPh+TTkdk8in1oo0btHxSby/PJI+zWvQup61Hk3+8zRBxrl/xotIGVX9Brguj2Iyhnb1K9GzqasVed5akQb4bPVeTsckMq6vtR5NwfA0Qf7PPbTjS2CGiIwl53OoGpMj4/oGcfJ8Ap+vsVZkSReTkMT7yyLp2bQ67epXcjocU0J4Oln5N+6hHVNxjWGsj2sVDmPyTMeAynQPqsZ7yyKJTciPNVdNUTFrzT5OnE+w1qMpUJe9nLmqfqqqj6pqWF4EZEx64/oGcTzaWpElWVxiMtOXRnJ1YDU6BlR2OhxTglx2gjQmP3VqWIUrm1Tl3WWRxCVaK7Ik+uLPfRyPjrfWoylweZIgRaS2iPjmRV3GZDaubxDHzsUz+899TodiCpir9biLro2r0LlRFafDMSVMXrUgPwW2i8j/8qg+Y9J0bVyVzo2q8M7SXdaKLGHmhOznyFlrPRpn5EmCVNV+QGNsLKTJJ+P7BnHkbDxfrYtyOhRTQOKTknlnyS46NaxMt8ZVnQ7HlECeTjW3VET83c/vFZF/AaWto47JL1c2qUrHgMq8sziChKSU7A8wRd7X66I4dCaOcX2DcC3takzB8rQFWUlVz4pIR+BuoDLwft6FZUxGIsK4vkEcPBPHN+utFVncJSSl8PbiXXRoUImrA6s5HY4poTxNkIkiUgoYDbykqpOAlnkXljEX6hFUjbb1KzFtcQSJydaKLM7mbojiwOlYxlrr0TjI0wT5BrAJuB74wb2tfJ5EZMxFiAjj+wYSdSqWuRsOOB2OySeJySm8tTiCtvUq0qtpdafDMSWYpzPpfAJ0AVqpaqyIBAKrPKlLRAaKyA4RiRCRx7PY7ysiX7r3rxGRhu7tt4nIxnSPFBFp5963xF1n6r4ansRmCp/ezWrQqq4/0xZHkGStyGLpu40H2X8ylrF9rPVonJWrBCnpPq2qGq2qse7nEar6t8xlclCfNzANuBZoAYwSkRaZit0FnFLVQOBV4CX3OT9X1Xaq2g64A9ijqhvTHXdb6n5VPZqb92kKLxFhXJ8g9p6I4ftNB50Ox+SxpOQUpi2OoEVtf/peYd9rjbNy24JcLCJjRaRB+o0i4iMifUTkY2BMLurrDESoaqSqJgCzuXBO16HAx+7nXwN9s0jCo4AvcnFeU4T1b1GTK2r789aiCJJT1OlwTB76cfMhdh8/bz1XTaGQ2wQ5EEgGvhCRgyKyVUQigXBcSepVVZ2Zi/rqAvvTvY7iwlVB0sqoahJwBsg8KGoEFybIj9yXV5++WKtWRO4RkRARCTl27FguwjZOcrUiA4k8fp4fN1srsrhITlHeWhxB81oVuKZFTafDMSZ3CVJV41T1bVW9CggA+gIdVDVAVe/OdIkzJ7JKXJmbBJcsIyJdgBhVDU23/zZVbQ10dz/uyOrkqvqeqgaranD16tYZoCgZ0LIWTWuW581FEaRYK7JY+Dn0EBFHoxnbJwgvL2s9Gud5PJOOqiaq6iFVPQ0gIp4s0haFa6msVPWAzE2CtDLuoSUVgZPp9o8kU+tRVQ+4f54DZuG6lGuKES8vYWyfICKORvNz6GGnwzGXKSVFeXNhBEE1ynNtq1pOh2MMkE2CFJEWIvJZpm3lRKSziPxNRF4RkV9E5ACw24PzrwWCRKSRiPjgSnbfZyrzPX/d17wZWKSq6o7FC7gF173L1PhKiUg19/PSuIaihGKKneta16ZJ9XK8uSjcWpFF3G9bD7PjyDke7BNorUdTaGTXglwIPJX6QkT2ADuB/wAdgF1AG6C9quZ6oTb3PcUHgV+BbcAcVQ0TkckiMsRd7EOgqohEAA8D6YeC9ACiVDUy3TZf4FcR2QxsBA5gs/wUS97uVuT2w+f4besRp8MxHlJVXl8YQeNq5bi+TR2nwzEmjbgbY1nvFGkNPK6qt7lfvwX0BP6tqnPc23araqOCCDY/BQcHa0hIiNNhmFxKSk6h/6vLKFPam5/GXW09H4ugBVuPcPcnIbxyS1tu6ljP6XBMLonIOlUNdjqO/HDJFqSqbklNju7XDwKDgUHu3p/XcmGnGmMKTClvLx7oHcjWQ2dZuM2GuxY1qsobC8NpUKUsQ9tZ69EULrnupKOqe1R1DK77gvcAtUSkV14HZkxODW1XhwZVyvLGonAudUXEFD5Ldhxjy4EzPNg7kFLeebU8rTF543J6sYap6jCgN/CUiCzLu7CMybnS3l480LsJm6POsGSnjWctKlz3HsOpW6kMwzpkHv5sjPMu6yubiAxW1TXuBZMn51FMxuTasPb1qFupDK//bq3IomJFxHE27j/N/b2bUNpaj6YQutxP5X9Sn6jq75dZlzEe8ynlxX29mrBx/2lWRBx3OhyTDVXl9d/DqV3Rj5utY44ppC43QVqXQVNo3BJcj1r+ftaKLAJWRZ4gZO8p7uvVBN9S3k6HY0yWLjdB2l8hU2j4lvLmvl5NCNl7ilWRJ5wOx1zCGwvDqVHBl+HB9bMvbIxD7MK/KVZGdKpPjQq+vLEw3OlQzEX8ufskqyNPcm/PJviVttajKbwsQZpixa+0N//s2YTVkSf5c/fJ7A8wBe7VBTupVt6XUZ0bZF/YGAddboK0+b1MoXNr5wZUK+/Dm4usFVnYrNx1nFWRJ7i/VxPK+Fjr0RRul5UgVbV/XgViTF4p4+PNPT0aszz8OOv2nnI6HOOmqry6YCc1/X25tYu1Hk3hl6sEebGFh3Nbxpj8dnvXAKqW8+G133c6HYpxWx5+nLV7TvFg70C792iKhNy2IBeLyFgRyfD1T0R8RKSPiHzMX0tTGeOYsj6luK9XE5aHH2e19Wh1nKoydcFO6lT0Y3gn67lqiobcJsiBQDLwhYgcFJGtIhIJhAOjgFdVdWYex2iMR27vGkCNCr5M/W2njYt02OIdR9m4/zRj+wbZuEdTZOQoQYpIFQBVjVPVt1X1KiAA6At0UNUAVb1bVTeKSBkR6ZGPMRuTI36lvRnbJ5A/95xkebjNruOU1NZj/SplbNYcU6RkmyBFpCpwLDVJplLVRFU9pKqnMx3SAFichzEa47HhnepTt1IZXvlth7UiHfLb1iOEHjjLuD5BNueqKVJy+mnNt443IjJQRHaISISIPJ7Ffl8R+dK9f42INHRvbygisSKy0f2Ynu6YjiKyxX3MG9ZxqOTyLeXN+L5BbIo6w++2XmSBS0lx9VxtVK0cw9rbih2maMlpgrzgq7eI3Ckim0UkwNOTi4g3MA24FmgBjBKRFpmK3QWcUtVA4FXgpXT7dqlqO/fj3nTb38G1VmWQ+zHQ0xhN0Xdjh7o0rFqWV37bQUqKtSIL0s+hh9l++Bzj+wbZeo+myPHoEysiTwEzgMbAGhHp5OH5OwMRqhqpqgnAbGBopjJDgY/dz78G+l6qRSgitQF/VV2lrmtqnwA3eBifKQZKeXvxUP+mbD98jvmhh5wOp8RITlFe/X0ngTXKM7htHafDMSbXcj0O0n0pczIwFWgC7AOWiMgwD85fF9if7nWUe1uWZVQ1CTgDVHXvayQiG0RkqYh0T1c+Kps6TQlzfZs6NK1ZnqkLdpKUnOJ0OCXCj5sPEnE0mn/1C8Lby+5ymKInNwmyLPAdcDfwqKo+oqpHgJ7Ab8BXIvJwLs+f1W9N5mtgFytzCGigqu2Bh4FZIuKfwzpdFYvcIyIhIhJy7JitRF+ceXsJD/dvSuSx83y38aDT4RR7CUkpTF2wk+a1KnBdq9pOh2OMR3LTSWc+MAC4Q1X/l7pDVWOBG3HdS3wZeCUX548C0o8argdk/uuVVkZESgEVgZOqGq+qJ9wxrAN2AU3d5dP3Jc+qztTY31PVYFUNrl69ei7CNkXRgJa1aFnHn9cW7iTRWpH56su1+9h7IoZHBzbDy1qPpojKTQsyABikqrMy71CX8cBD5K5DzFogSEQaiYgPMBL4PlOZ7/lrdp6bgUWqqiJS3d3JBxFpjKszTqSqHgLOiUhX973K0bhavqaEExEeuaYZ+0/GMidkf/YHGI+cj0/i9YURdG5Yhd7NajgdjjEey0mCjAM+AHqp6u+XKqiqbwA3AaE5Obn7nuKDwK/ANmCOqoaJyGQRGeIu9iFQVUQicF1KTR0K0gPYLCKbcHXeuVdVU9c3us8dcwSuluXPOYnHFH+9mlUnOKAyr/8eTkxCktPhFEszVuzmeHQ8j13bHBthZYoyscHTLsHBwRoSEuJ0GKYAhOw5yc3TVzGhf1PG9g1yOpxi5eT5BHr8dzHdmlTl/dHBTodjCoCIrFPVYvmfbQOTTIkT3LAKA1rW5N1lkRyPjnc6nGJl2uIIYhKSeHRAM6dDMeayWYI0JdKjA5sTm5jMmwttUeW8EnUqhk9X7eXmjvUIqlnB6XCMuWyWIE2J1KR6eUZ2qs/na/ax5/h5p8MpFl5dEA4C/+rX1OlQjMkTliBNiTW+XxA+pbx4+dcdTodS5G0/fJZvN0Rx55UNqVOpjNPhGJMnLEGaEqtGBT/u7rL7HMoAABFKSURBVN6Yn7YcYsO+U06HU2SpKv/+cSv+fqW5v1cTp8MxJs9YgjQl2t09GlOtvC9Tft5uy2F5aOG2o/wRcYKH+gVRqayP0+EYk2csQZoSrbxvKf7VL4g/d5/k17AjTodT5CQkpfDC/G00qV6O27p6vLCPMYWSJUhT4o3sVJ+mNcvzn/lbiUtMdjqcIuXT1XuJPH6epwa1sMWQTbFjn2hT4pXy9uLZwS3ZfzKWD/6/vXuPs6qs9zj++TrDMAzgIDdFBhEF5aYGEqgZGUVpmoC3ME0tTU3tlHY5mJllHi07p5MnyQ5pxVETFQ3JVErFC5pyRwFBRiAZuYvcL8Mwv/7Yi840bFBhZq9h9vf9es1r9lr7WWv/1osZvrOetdbzvLgw7XL2G2s2VXLH028y8Kh2nHK0xzK2xscBaQac1LUtp/Y6hJET32LZui1pl7Nf+MXTb7KpcgffP72Hh5SzRskBaZa44fQeVEdw2xPz0i6lwVuwYgP3v/o2X+x/GEd5UABrpByQZolOrUu4YuARjJ+1lCmL17z/BnkqIrj58bmUFBVw7WAPCmCNlwPSrIavndKVQ0uL+eH4Oeyo9mMf2Tw1ezkvLljNtZ8+itbN/ViHNV4OSLMamhUVcP3nejBn6XoenOI5I2vbtK2Kmx+fS48OB3LRiX6swxo3B6RZLWcc24H+XVpz+4R5vOvZPv7F/zyzgGXrtnLL0F4U+rEOa+T8E25WiyRuGdqbTduquNU37PzTmys2cM+kRZzXr4zjO7dOuxyzeueANMviqINbcsXAI3lkegUvl69Ou5zUVVcH3x83mxbFhYw4rUfa5ZjlROoBKelUSfMllUsakeX9ppIeTN5/VdLhyfrBkqZJej35PqjGNs8l+5yZfLXP3RFZY3HNoK50blPCDeNm5/0IO2OmLGHyojVcf1p335hjeSPVgJRUAIwETgN6AudL6lmr2aXAexHRFfhv4KfJ+tXA5yPiGOBi4N5a210QER9JvlbW20FYo1XcpIBbhvZm0epN/GpiedrlpGb5uq3c9sQbnHRkG87r1yntcsxyJu0zyP5AeUQsjIhKYAwwpFabIcDo5PVY4FOSFBEzImJpsn4OUCypaU6qtrzx8W7tGNanI3c9/xZzl65Pu5yciwi+P+51tldXc9tZx3jEHMsraQdkR6DmvfQVybqsbSKiClgHtKnV5mxgRkTUvOXwd0n36o3yb7Xtgx+c0ZPSZkV8++FZVFZVp11OTj3+2jKefmMl3xp8NJ3bNE+7HLOcSjsgswVX7aez99hGUi8y3a5X1Hj/gqTr9ePJ15eyfrh0uaSpkqauWrXqQxVu+eOg5kXcOqw3c5etZ2QedbWu2rCNm8bP4biyUr78scPTLscs59IOyAqg5kWNMmDp7tpIKgRKgTXJchnwR+CiiHhr5wYR8U7yfQPwBzJdubuIiFER0S8i+rVr59kIbPc+0+sQhvXpyMiJ5cx+Z13a5dS7iGDEI6+xcVsVPzv3OD/zaHkp7Z/6KUA3SV0kFQHDgfG12owncxMOwDnAsxERkloBfwauj4iXdjaWVCipbfK6CXAGMLuej8PywE2f70nr5pmu1sZ+V+sDk5fwzLyVjDi1uwcjt7yVakAm1xSvASYAbwAPRcQcSTdLOjNpdg/QRlI5cB2w81GQa4CuwI21HudoCkyQ9BowE3gH+E3ujsoaq1YlRfz0nGOZt3wDP3my8Q4gsHj1Jn78+FxO7tqWS046PO1yzFKjCA/IDNCvX7+YOnVq2mXYfuDHj8/lnkmL+M1F/Rjc8+C0y6lT23dUc+6v/8ai1ZuY8M2BHFJanHZJ1sBJmhYR/dKuoz6k3cVqtt/57qlH0+vQA/nO2FmNbnLlnz45j5lL1nLrsGMcjpb3HJBmH1LTwgJ+eX4fKquq+caYmVTtaByPfjw1exl3T1rExSd25vRjO6RdjlnqHJBme+GIdi24ZWhvJi9a0yiuRy5evYnvPPwax5WV8r3TPdaqGUBh2gWY7a/O6lvGaxXruHvSInp1PJBhfcrSLmmvbK6s4qr7p3PAAWLkBX1pWliQdklmDYLPIM32wQ2n92BAl9aMeOT1/fL5yOrq4LoHZ/HG8vX84gsfoeygkrRLMmswHJBm+6BJwQGMvKAvbZoXccW901ixfmvaJX0ot0+Yz1NzlnPD53rwye6e9MasJgek2T5q26Ipoy7qx3ubK7nkd1NYv3V72iV9IA9NXcKvn3+LLw44jEtP7pJ2OWYNjgPSrA707ljKXRcez4IVG7ji/6axraphj7Tz7LwVfO/R1zm5a1t+dGYvz9JhloUD0qyOfOKodtx+zrH8beG7XPfQLHZUN8xBOF4qX82V902ne4eWjLygL008zqpZVr6L1awOndW3jNUbt3HrE/MokPj5eQ1roO+pi9dw2eipdGnTnHu/MoDSZk3SLsmswXJAmtWxywceSVV1cPtT89m+o5o7hvehqDD9kHxl4btcNnoqHUqLufey/hzUvCjtkswatPR/a80aoatO6cqNZ/TkydnL+dp909hSme41yT+/toyL7pnMIaXF3P/VAbRv6WHkzN6PA9Ksnlx6chduGdqbZ+ev5Nz/fZmla9MZt/X3Ly3imgemc0xZKWOvPJEOpc1SqcNsf+OANKtHF57QmXsu7sfi1Zs5886XmPb3NTn77M2VVXzn4Vn88E9zGdzjYO6/bACtStytavZBOSDN6tmg7gcz7uqTaNG0gOGjXmHkxPJ6H+B8/vINnHnnS4ydXsHXB3XlrguPp7iJh5Az+zAckGY50LV9Sx67+mQG9zyYn02Yz7Bfvcy85evr/HO2bt/Bnc8u4Mw7J7F283buu3QA3/rM0RQc4OcczT4sT5ic8ITJlitPvL6MG8fNZv3W7Qz/6GFc9ckj9/m6YEQwYc4K/uOJuSxZs4XTeh/Cj4b08s04Vu88YXI9knSqpPmSyiWNyPJ+U0kPJu+/KunwGu9dn6yfL+mzH3SfZmn63DEd+Ot1n+Dcfp0YM+VtPnH7c/zgsdmUr9z4ofe1pXIHf5xRwRm/nMSV902jpEkhf7hsAHddeLzD0WwfpXoGKakAeBMYDFQAU4DzI2JujTZXAcdGxJWShgPDIuILknoCDwD9gUOBp4Gjks32uM9sfAZpaah4bzMjJ77Fw1OXUFUdHFtWyqDu7enfpTW9Di3d5UH+qh3VLH53MzOXrOWFN1cxcd5KNmyr4oh2zbli4BGc3besQQ1MYI1fYz6DTHuggP5AeUQsBJA0BhgC1AyzIcAPk9djgTuVGThyCDAmIrYBiySVJ/vjA+zTrEEoO6iE2846hmsHd2PcjHd4cvZy7nhmATv/bj2wuJDSkiYUHnAAWyp3sGrjtn8OYdemeRGf7X0IZ/XtyAld2nCArzOa1am0A7IjsKTGcgUwYHdtIqJK0jqgTbL+lVrbdkxev98+AZB0OXA5wGGHHbZ3R2BWB9q3LObygUdy+cAjWbu5kplL1jJ/+QbeWbuFDVur2L6jmpKiAtq3LKZzmxKO69SKru1aOBTN6lHaAZntt7t2n+/u2uxufbb+paz9yBExChgFmS7W3ZdpljutSoo45ej2nHK052c0S1PaFysqgE41lsuApbtrI6kQKAXW7GHbD7JPMzOzPUo7IKcA3SR1kVQEDAfG12ozHrg4eX0O8Gxk7iwaDwxP7nLtAnQDJn/AfZqZme1Rql2syTXFa4AJQAHw24iYI+lmYGpEjAfuAe5NbsJZQybwSNo9RObmmyrg6ojYAZBtn7k+NjMz2795oICEH/MwM/vwGvNjHml3sZqZmTVIDkgzM7MsHJBmZmZZOCDNzMyy8E06CUmrgL/v5eZtgdV1WM7+IB+PGfLzuH3M+WFvj7lzRLSr62IaAgdkHZA0tbHexbU7+XjMkJ/H7WPOD/l4zO/HXaxmZmZZOCDNzMyycEDWjVFpF5CCfDxmyM/j9jHnh3w85j3yNUgzM7MsfAZpZmaWhQPSzMwsCwfkPpJ0qqT5ksoljUi7nvomqZOkiZLekDRH0jfSrilXJBVImiHp8bRryQVJrSSNlTQv+fc+Me2ackHStcnP9mxJD0gqTrumuibpt5JWSppdY11rSX+VtCD5flCaNTYEDsh9IKkAGAmcBvQEzpfUM92q6l0V8K2I6AGcAFydB8e80zeAN9IuIofuAJ6KiO7AceTBsUvqCPwb0C8iepOZMm94ulXVi98Dp9ZaNwJ4JiK6Ac8ky3nNAblv+gPlEbEwIiqBMcCQlGuqVxGxLCKmJ683kPlPs2O6VdU/SWXA6cDdadeSC5IOBAaSmY+ViKiMiLXpVpUzhUAzSYVACbA05XrqXES8QGZ+3ZqGAKOT16OBoTktqgFyQO6bjsCSGssV5EFY7CTpcKAP8Gq6leTEL4DvAtVpF5IjRwCrgN8l3cp3S2qedlH1LSLeAf4TeBtYBqyLiL+kW1XOHBwRyyDzhzDQPuV6UueA3DfKsi4vnpuR1AJ4BPhmRKxPu576JOkMYGVETEu7lhwqBPoCd0VEH2ATedDlllx3GwJ0AQ4Fmku6MN2qLC0OyH1TAXSqsVxGI+yOqU1SEzLheH9EPJp2PTnwMeBMSYvJdKMPknRfuiXVuwqgIiJ29g6MJROYjd2ngUURsSoitgOPAielXFOurJDUASD5vjLlelLngNw3U4BukrpIKiJzMX98yjXVK0kic13qjYj4edr15EJEXB8RZRFxOJl/42cjolGfVUTEcmCJpKOTVZ8C5qZYUq68DZwgqST5Wf8UeXBzUmI8cHHy+mLgsRRraRAK0y5gfxYRVZKuASaQudvttxExJ+Wy6tvHgC8Br0uamaz7XkQ8kWJNVj++Dtyf/PG3EPhyyvXUu4h4VdJYYDqZO7Zn0AiHYJP0AHAK0FZSBXAT8BPgIUmXkvlD4dz0KmwYPNScmZlZFu5iNTMzy8IBaWZmloUD0szMLAsHpJmZWRYOSDMzsywckGZmZlk4IM3MzLJwQJrVEUkb62GfzSQ9n0yttrs2zyUDx+/u/SJJLySzU+yybGbZOSDNGravAI9GxI693UEyFdszwBeyLZtZdg5Iszom6bpkNvrZkr5ZY/2NkuYls7U/IOnbyfquklZJWixppqQ1kt5K5mS8gBpjYkq6WNI0Sa9JejHLZ58j6RVJsyRNktQueWtcsi92s2xmtbiLxawOSTqezJilA8hMh/aqpOfJjNV7Npn5MwvJjPU5DSAiyiVNAn4eES9Keo7MOKhbgSMiYnGy75bAvwMfiYhKSa2ylDAxIsYm7W8CzgNGArOBj9ZoV3vZzGrxGaRZ3ToZ+GNEbIqIjWSmS/p4sv6xiNgSERuAP9XarheZ0ALoDswH2gJra7TZATQD/ktSv4hYy64ukTRZ0izgKjIhS9JFW5mE7C7LZrYrB6RZ3co2ifae1iOpGVAcEe9J6gS8m1wn3AIU72wXEZuB3sBLwChJV9Xaz0VAf2BQRBxHJmRrzi7TlCQwd7NsZjU4IM3q1gvA0GQ+webAMOBFYBLweUnFkloAp9fYpif/P+dgj52vI+I9oEBSMYCkbsmZ6RjgcWqEZ+IY4OWI2CjpbDIT/b6ebNsG2DkJ8C7LZrYrX4M0q0MRMV3S74HJyaq7I2IGgKTxwCzg78BUYF3Spmb36hagr6TuETEP+AuZ7tmngRsknQhsInNm+NVaHz8aeEzSOcATwMKI2JS898lkHbtZNrNaPB+kWY5IapGc3ZWQOdO8PCKmv882fYDrIuJLe2jzHHDJzpt5dtPmUeD6iJifbdnMduUzSLPcGSWpJ5mu0dHvF44AETFD0kRJBXv7LKSkImBcjXD8l2Uzy85nkGb7OUmXkAm8bHe1mtleckCamZll4btYzczMsnBAmpmZZeGANDMzy8IBaWZmloUD0szMLAsHpJmZWRb/AOFgK2Um/7rhAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.arange(0,10,0.05)\n",
    "mu, sigma = 5, 2\n",
    "y = lambda x : -np.exp(-((x-mu)**2)/(2*sigma**2))/(sigma*np.sqrt(2*np.pi))+0.2\n",
    "plt.plot(x, y(x))\n",
    "plt.title(\"Loss function\")\n",
    "plt.xlabel(\"$\\log\\pi(s|a))$\")\n",
    "plt.ylabel(\"$\\sum(-\\hat{A}(s,a)\\log\\pi(s|a))$\")\n",
    "plt.annotate(r'rising_edge',xy=(8,y(8)), xycoords='data', xytext=(+30, -30),\n",
    "             textcoords='offset points', fontsize=16,\n",
    "             arrowprops=dict(arrowstyle='->', connectionstyle=\"arc3,rad=.2\"))\n",
    "plt.annotate(r'down_edge',xy=(2,y(2)), xycoords='data', xytext=(+30, -30),\n",
    "             textcoords='offset points', fontsize=16,\n",
    "             arrowprops=dict(arrowstyle='->', connectionstyle=\"arc3,rad=.2\"))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* policy gradient 可以很好的处理连续状态：\n",
    "\n",
    "    神经网络可以很好的映射:从某个state$\\rightarrow$action\n",
    "    \n",
    "    \n",
    "* 对更新的理解\n",
    "\n",
    "    到最后Loss可以收敛一个趋近于0的值: 考虑到公式$-\\hat{A}log\\pi(s,a)$，开始训练时$\\hat{A}$大的可能少sample，$log\\pi(s,a)$会较小(取反会较大)，此时在通过更新Loss Function找到global optimum。$\\hat{A}$小的会少sample，$log\\pi(s,a)$会较小(取反会较大)、$\\hat{A}$大的会多sample，$log\\pi(s,a)$会较大(取反会较小)，所以稳定状态总的Loss是趋于0的，也就是说此时的神经网络参数基本稳定。但训练过程中会出现从最高的reward变为较小的reward的现象，可以宏观的理解为可能只达到了local optimum,也就是有些state和action没有搜索到\n",
    "    \n",
    "    \n",
    "* 对连续动作的理解\n",
    "    \n",
    "    状态动作概率映射函数$\\pi(s,a)$本身就可以理解为在某个state从$action\\rightarrow\\pi(s,a)$的映射,具体可如下图抽象理解\n",
    "\n",
    "\n",
    "* 对$\\Delta\\pi(s,a)$的理解(先不除$\\pi(s,a)$)\n",
    "\n",
    "    此时是对单个state进行考虑,所以横坐标为action的映射，所以沿着导数的方向就可以找到$\\pi_(s,a)$最大的action"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.arange(1,10,0.05)\n",
    "y = 1/x\n",
    "plt.xlabel(\"action\")\n",
    "plt.ylabel(\"$\\pi(s,a)$\")\n",
    "plt.plot(x,y)\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
